package com.example.fund.amplitude;

import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

public class TimePeriod extends AbstractTimePeriod {

	private static DateFormat DF1 = new SimpleDateFormat("yyyy-MM-dd");
	
	public TimePeriod(IAmplitude iAmplitude)
	{
		this.iAmplitude = iAmplitude;
	}

	@Override
	public List<String> getTimePeriodList(List<String> dateList) {
		List<String> timePeriods = new LinkedList<String>();
		timePeriods.add("今年来");
		timePeriods.add("近1周");
		timePeriods.add("近1月");
		timePeriods.add("近2月");
		timePeriods.add("近3月");
		timePeriods.add("近6月");
		timePeriods.add("近1年");
		timePeriods.add("近2年");
		timePeriods.add("近3年");
		timePeriods.add("近4年");
		timePeriods.add("近5年");
		timePeriods.add("近6年");
		timePeriods.add("近7年");
		timePeriods.add("近8年");
		timePeriods.add("近9年");
		timePeriods.add("近10年");
		timePeriods.add("近11年");
		timePeriods.add("近12年");
		timePeriods.add("近13年");
		timePeriods.add("近14年");
		timePeriods.add("近15年");
		timePeriods.add("96年以来");
		
		BigDecimal pRate = new BigDecimal("50.00");
		BigDecimal nRate = new BigDecimal("-40.00");
	//	List<String> amplitudeDateList = getAmplitudeDateList(db,dateList,pRate,nRate);
		List<String> amplitudeDateList = getSHAmplitudeDateList(dateList,pRate,nRate);

		if(amplitudeDateList.size()<=2)
		{
			return timePeriods;
		}
		
		int x = 1;
		int n = 1;
		for(int i=1;i<amplitudeDateList.size();i++)
		{
			if(i%2==1)
			{
				timePeriods.add("牛"+(x++));
			}else
			{
				timePeriods.add("熊"+(n++));
			}
		}
		
		int n_x = 1;
		for(int i=2;i<amplitudeDateList.size();i=i+2)
		{
			timePeriods.add("牛>熊"+(n_x++));
		}

		x = 2;
		n = 2;
		for(int i=3;i<amplitudeDateList.size();i++)
		{
			if(i%2==1)
			{
				timePeriods.add("牛1>牛"+(x++));
			}else
			{
				timePeriods.add("牛1>熊"+(n++));
			}
		}
		
		int x_n = 1;
		int n_n = 1;
		for(int i=1;i<amplitudeDateList.size();i++)
		{
			if(i%2==1)
			{
				timePeriods.add("牛"+(n_n++)+">今");
			}else
			{
				timePeriods.add("熊"+(x_n++)+">今");
			}
		}
    	
    	return timePeriods;
	}

	@Override
	public Map<String, String> getTimePeriodMap(List<String> dateList) {
		Map<String,String> periodMap = new HashMap<String,String>();
		if(dateList.size()==0)
		{
			return periodMap;
		}
		Date date0 = new Date();
		//最新时间
		String lastDate = dateList.get(0);
		try {
			date0 = DF1.parse(lastDate);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		Calendar c = Calendar.getInstance();
		c.setTime(date0);
		//今年来
		String currYear = c.get(Calendar.YEAR)+"-01-01";
		//近1周
		c.add(Calendar.WEEK_OF_MONTH, -1);
		String week1 = DF1.format(c.getTime());
		//近1月
		c.setTime(date0);
		c.add(Calendar.MONTH, -1);
		String month1 = DF1.format(c.getTime());
		//近2月
		c.add(Calendar.MONTH, -1);
		String month2 = DF1.format(c.getTime());
		//近3月
		c.add(Calendar.MONTH, -1);
		String month3 = DF1.format(c.getTime());
		//近6月
		c.add(Calendar.MONTH, -3);
		String month6 = DF1.format(c.getTime());
		//近1年
		c.add(Calendar.MONTH, -6);
		String year1 = DF1.format(c.getTime());
		//近2年
		c.add(Calendar.YEAR, -1);
		String year2 = DF1.format(c.getTime());
		//近3年
		c.add(Calendar.YEAR, -1);
		String year3 = DF1.format(c.getTime());
		//近4年
		c.add(Calendar.YEAR, -1);
		String year4 = DF1.format(c.getTime());
		//近5年
		c.add(Calendar.YEAR, -1);
		String year5 = DF1.format(c.getTime());
		//近6年
		c.add(Calendar.YEAR, -1);
		String year6 = DF1.format(c.getTime());
		//近7年
		c.add(Calendar.YEAR, -1);
		String year7 = DF1.format(c.getTime());
		//近8年
		c.add(Calendar.YEAR, -1);
		String year8 = DF1.format(c.getTime());
		//近9年
		c.add(Calendar.YEAR, -1);
		String year9 = DF1.format(c.getTime());
		//近10年
		c.add(Calendar.YEAR, -1);
		String year10 = DF1.format(c.getTime());
		//近11年
		c.add(Calendar.YEAR, -1);
		String year11 = DF1.format(c.getTime());
		//近12年
		c.add(Calendar.YEAR, -1);
		String year12 = DF1.format(c.getTime());
		//近13年
		c.add(Calendar.YEAR, -1);
		String year13 = DF1.format(c.getTime());
		//近14年
		c.add(Calendar.YEAR, -1);
		String year14 = DF1.format(c.getTime());
		//近15年
		c.add(Calendar.YEAR, -1);
		String year15 = DF1.format(c.getTime());
		
		for(int i=0;i<dateList.size();i++)
		{
			String date = dateList.get(i);
			if(periodMap.get("近1周")==null && date.compareTo(week1)<=0)
			{
				periodMap.put("近1周",date+":"+lastDate);
			}
			else if(periodMap.get("近1月")==null && date.compareTo(month1)<=0)
			{
				periodMap.put("近1月",date+":"+lastDate);
			}
			else if(periodMap.get("近2月")==null && date.compareTo(month2)<=0)
			{
				periodMap.put("近2月",date+":"+lastDate);
			}
			else if(periodMap.get("近3月")==null && date.compareTo(month3)<=0)
			{
				periodMap.put("近3月",date+":"+lastDate);
			}
			else if(periodMap.get("近6月")==null && date.compareTo(month6)<=0)
			{
				periodMap.put("近6月",date+":"+lastDate);
			}
			else if(periodMap.get("近1年")==null && date.compareTo(year1)<=0)
			{
				periodMap.put("近1年",date+":"+lastDate);
			}
			else if(periodMap.get("近2年")==null && date.compareTo(year2)<=0)
			{
				periodMap.put("近2年",date+":"+lastDate);
			}
			else if(periodMap.get("近3年")==null && date.compareTo(year3)<=0)
			{
				periodMap.put("近3年",date+":"+lastDate);
			}
			else if(periodMap.get("近4年")==null && date.compareTo(year4)<=0)
			{
				periodMap.put("近4年",date+":"+lastDate);
			}
			else if(periodMap.get("近5年")==null && date.compareTo(year5)<=0)
			{
				periodMap.put("近5年",date+":"+lastDate);
			}
			else if(periodMap.get("近6年")==null && date.compareTo(year6)<=0)
			{
				periodMap.put("近6年",date+":"+lastDate);
			}
			else if(periodMap.get("近7年")==null && date.compareTo(year7)<=0)
			{
				periodMap.put("近7年",date+":"+lastDate);
			}
			else if(periodMap.get("近8年")==null && date.compareTo(year8)<=0)
			{
				periodMap.put("近8年",date+":"+lastDate);
			}
			else if(periodMap.get("近9年")==null && date.compareTo(year9)<=0)
			{
				periodMap.put("近9年",date+":"+lastDate);
			}
			else if(periodMap.get("近10年")==null && date.compareTo(year10)<=0)
			{
				periodMap.put("近10年",date+":"+lastDate);
			}
			else if(periodMap.get("近11年")==null && date.compareTo(year11)<=0)
			{
				periodMap.put("近11年",date+":"+lastDate);
			}
			else if(periodMap.get("近12年")==null && date.compareTo(year12)<=0)
			{
				periodMap.put("近12年",date+":"+lastDate);
			}
			else if(periodMap.get("近13年")==null && date.compareTo(year13)<=0)
			{
				periodMap.put("近13年",date+":"+lastDate);
			}
			else if(periodMap.get("近14年")==null && date.compareTo(year14)<=0)
			{
				periodMap.put("近14年",date+":"+lastDate);
			}
			else if(periodMap.get("近15年")==null && date.compareTo(year15)<=0)
			{
				periodMap.put("近15年",date+":"+lastDate);
			}
			else if(periodMap.get("今年来")==null && date.compareTo(currYear)<=0)
			{
				periodMap.put("今年来",date+":"+lastDate);
			}
		}
		periodMap.put("96年以来","1996-01-22"+":"+lastDate);
	//	periodMap.put("05年以来","2005-07-18"+":"+lastDate);
		
		BigDecimal pRate = new BigDecimal("50.00");
		BigDecimal nRate = new BigDecimal("-40.00");
//		List<String> amplitudeDateList = getAmplitudeDateList(db,dateList,pRate,nRate);
		List<String> amplitudeDateList = getSHAmplitudeDateList(dateList,pRate,nRate);
		BigDecimal pRate1 = new BigDecimal("14.00");
		BigDecimal nRate1 = new BigDecimal("-14.00");
		List<String> amplitudeDateList1 = getSHAmplitudeDateList(dateList,pRate1,nRate1);
		
		if(amplitudeDateList.size()<=2)
		{
			return periodMap;
		}
		
		String startDate = "1996-01-22";
		int x = 1;
		int n = 1;
		for(int i=1;i<amplitudeDateList.size();i++)
		{
			String endDate = amplitudeDateList.get(i);
			if(i%2==1)
			{
				periodMap.put("牛"+(x++), startDate+":"+endDate);
			}else
			{
				periodMap.put("熊"+(n++), startDate+":"+endDate);
			}
			startDate = endDate;
		}
		
		startDate = "1996-01-22";
		int n_x = 1;
		for(int i=2;i<amplitudeDateList.size();i=i+2)
		{
			String endDate = amplitudeDateList.get(i);
			String endDate1 = endDate;
			for(int j=0;j<amplitudeDateList1.size();j++)
			{
				if(endDate.equals(amplitudeDateList1.get(j)))
				{
					if(j+2<amplitudeDateList1.size())
					{
						endDate1 = amplitudeDateList1.get(j+2);
					}else if(j+1<amplitudeDateList1.size())
					{
						endDate1 = amplitudeDateList1.get(j+1);
					}
				}
			}
			periodMap.put("牛>熊"+(n_x++), startDate+":"+endDate1);
			startDate = endDate;
		}

		startDate = "1996-01-22";
		x = 2;
		n = 2;
		for(int i=3;i<amplitudeDateList.size();i++)
		{
			String endDate = amplitudeDateList.get(i);
			if(i%2==1)
			{
				periodMap.put("牛1>牛"+(x++), startDate+":"+endDate);
			}else
			{
				periodMap.put("牛1>熊"+(n++), startDate+":"+endDate);
			}
		}
		
		startDate = "1996-01-22";
		int x_n = 1;
		int n_n = 1;
		for(int i=1;i<amplitudeDateList.size();i++)
		{
			if(i%2==1)
			{
				periodMap.put("牛"+(n_n++)+">今", startDate+":"+lastDate);
			}else
			{
				periodMap.put("熊"+(x_n++)+">今", startDate+":"+lastDate);
			}
			startDate = amplitudeDateList.get(i);
		}
    	
    	return periodMap;
	}
	


}
